home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMIGA-CD 2
/
Amiga-CD - Volume 2.iso
/
gepackte_disketten
/
1994
/
08_94_5.dms
/
08_94_5.adf
/
term-4.0-Source.lha
/
termInfoWindow.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-07-07
|
8KB
|
401 lines
/*
** termInfoWindow.c
**
** Status information window support routines
**
** Copyright © 1990-1994 by Olaf `Olsen' Barthel
** All Rights Reserved
*/
#include "termGlobal.h"
enum { GAD_UPDATE=1,GAD_SESSION,GAD_BYTES_IN_OUT,GAD_CONNECT_STRING,GAD_BBS_INFO,
GAD_SCREEN_SIZE,GAD_PORT_NAME,GAD_BUFFER_SIZE,GAD_MEMORY,
};
STATIC struct Task *InfoTask;
STATIC struct LayoutHandle *InfoHandle;
/* LocalRefreshInfoWindow():
*
* Refresh, i.e. redraw, the contents of the info window.
*/
STATIC VOID
LocalRefreshInfoWindow(VOID)
{
if(InfoWindow)
{
UBYTE DummyBuffer[256];
SPrintf(DummyBuffer,ConvNumber,BytesIn);
LT_SetAttributes(InfoHandle,GAD_BYTES_IN_OUT,
LABX_Index, 0,
LABX_Text, DummyBuffer,
TAG_DONE);
SPrintf(DummyBuffer,ConvNumber,BytesOut);
LT_SetAttributes(InfoHandle,GAD_BYTES_IN_OUT,
LABX_Index, 1,
LABX_Text, DummyBuffer,
TAG_DONE);
Forbid();
if(XEmulatorBase && XEM_IO)
{
if(XEmulatorBase -> lib_Version >= 4)
{
ULONG Result = XEmulatorInfo(XEM_IO,XEMI_CONSOLE_DIMENSIONS);
SPrintf(DummyBuffer,"%ld × %ld",XEMI_EXTRACT_COLUMNS(Result),XEMI_EXTRACT_LINES(Result));
}
else
strcpy(DummyBuffer,"???");
}
else
SPrintf(DummyBuffer,"%ld × %ld",LastColumn + 1,LastLine + 1);
Permit();
LT_SetAttributes(InfoHandle,GAD_SCREEN_SIZE,
GTTX_Text, DummyBuffer,
TAG_DONE);
SPrintf(DummyBuffer,ConvNumber,BufferSpace);
LT_SetAttributes(InfoHandle,GAD_BUFFER_SIZE,
GTTX_Text, DummyBuffer,
TAG_DONE);
SPrintf(DummyBuffer,ConvNumber,AvailMem(MEMF_ANY));
LT_SetAttributes(InfoHandle,GAD_MEMORY,
GTTX_Text, DummyBuffer,
TAG_DONE);
LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
LABX_Index, 0,
LABX_Text, CurrentBBSName[0] ? CurrentBBSName : (STRPTR)"-",
TAG_DONE);
LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
LABX_Index, 1,
LABX_Text, CurrentBBSNumber[0] ? CurrentBBSNumber : (STRPTR)"-",
TAG_DONE);
LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
LABX_Index, 2,
LABX_Text, CurrentBBSComment[0] ? CurrentBBSComment : (STRPTR)"-",
TAG_DONE);
LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
LABX_Index, 3,
LABX_Text, UserName[0] ? UserName : (STRPTR)"-",
TAG_DONE);
}
}
/* LocalCloseInfoWindow():
*
* Close the info window.
*/
STATIC VOID
LocalCloseInfoWindow(VOID)
{
Forbid();
CheckItem(MEN_STATUS_WINDOW,FALSE);
Permit();
if(InfoHandle)
{
LT_DeleteHandle(InfoHandle);
InfoHandle = NULL;
}
InfoWindow = NULL;
}
/* LocalOpenInfoWindow():
*
* Open the info window.
*/
STATIC BOOLEAN
LocalOpenInfoWindow(VOID)
{
if(InfoHandle = LT_CreateHandleTags(Window -> WScreen,
LH_LocaleHook, &LocaleHook,
TAG_DONE))
{
LT_New(InfoHandle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(InfoHandle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
UBYTE DummyBuffer[256];
if(!FormatStamp(&SessionStart,NULL,NULL,DummyBuffer,FALSE))
strcpy(DummyBuffer,"-");
LT_New(InfoHandle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_INFOWINDOW_SESSION_START_GAD,
LA_ID, GAD_SESSION,
LA_Chars, 40,
GTTX_Text, DummyBuffer,
GTTX_Border, TRUE,
GTTX_CopyText, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, XBAR_KIND,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, BOX_KIND,
LA_ID, GAD_BYTES_IN_OUT,
LABX_FirstLabel, MSG_INFOWINDOW_BYTES_RECEIVED_GAD,
LABX_LastLabel, MSG_INFOWINDOW_BYTES_SENT_GAD,
LABX_ReserveSpace, TRUE,
LABX_DrawBox, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, XBAR_KIND,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_INFOWINDOW_CONNECTION_MESSAGE_GAD,
LA_ID, GAD_CONNECT_STRING,
GTTX_Text, BaudBuffer[0] ? BaudBuffer : (STRPTR)"-",
GTTX_Border, TRUE,
GTTX_CopyText, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, BOX_KIND,
LA_ID, GAD_BBS_INFO,
LABX_FirstLabel, MSG_INFOWINDOW_BBS_NAME_GAD,
LABX_LastLabel, MSG_INFOWINDOW_BBS_USER_NAME_GAD,
LABX_ReserveSpace, TRUE,
LABX_DrawBox, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, XBAR_KIND,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_INFOWINDOW_SCREEN_SIZE_GAD,
LA_ID, GAD_SCREEN_SIZE,
GTTX_Border, TRUE,
GTTX_CopyText, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_INFOWINDOW_AREXX_PORT_NAME_GAD,
LA_ID, GAD_PORT_NAME,
GTTX_Text, RexxPortName,
GTTX_Border, TRUE,
GTTX_CopyText, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_INFOWINDOW_BUFFER_SIZE_GAD,
LA_ID, GAD_BUFFER_SIZE,
GTTX_Border, TRUE,
GTTX_CopyText, TRUE,
TAG_DONE);
LT_New(InfoHandle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_INFOWINDOW_FREE_MEMORY_GAD,
LA_ID, GAD_MEMORY,
GTTX_Border, TRUE,
GTTX_CopyText, TRUE,
TAG_DONE);
LT_EndGroup(InfoHandle);
}
LT_New(InfoHandle,
LA_Type,VERTICAL_KIND,
TAG_DONE);
{
LT_New(InfoHandle,
LA_Type, XBAR_KIND,
LAXB_FullSize, TRUE,
TAG_DONE);
LT_EndGroup(InfoHandle);
}
LT_New(InfoHandle,
LA_Type, HORIZONTAL_KIND,
TAG_DONE);
{
LT_New(InfoHandle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_V36_1414,
LA_ID, GAD_UPDATE,
LA_ReturnKey, TRUE,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_EndGroup(InfoHandle);
}
LT_EndGroup(InfoHandle);
}
if(InfoWindow = LT_Layout(InfoHandle,LocaleString(MSG_INFOWINDOW_STATUS_INFORMATION_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,ALIGNF_RIGHT,
LAWN_HelpHook, &GuideHook,
WA_DepthGadget, TRUE,
WA_CloseGadget, TRUE,
WA_DragBar, TRUE,
WA_RMBTrap, TRUE,
TAG_DONE))
{
LocalRefreshInfoWindow();
return(TRUE);
}
else
{
LT_DeleteHandle(InfoHandle);
InfoHandle = NULL;
}
}
return(FALSE);
}
STATIC VOID __saveds
StatusTaskEntry(VOID)
{
struct Process *Parent = ThisProcess;
if(LocalOpenInfoWindow())
{
struct IntuiMessage *Message;
ULONG MsgClass;
UWORD MsgCode,
MsgQualifier;
struct Gadget *MsgGadget;
BOOLEAN Done = FALSE;
InfoTask = FindTask(NULL);
Signal(Parent,SIG_HANDSHAKE);
do
{
if(Wait(PORTMASK(InfoWindow -> UserPort) | SIG_KILL) & SIG_KILL)
break;
else
{
while(Message = GT_GetIMsg(InfoWindow -> UserPort))
{
MsgClass = Message -> Class;
MsgCode = Message -> Code;
MsgQualifier = Message -> Qualifier;
MsgGadget = (struct Gadget *)Message -> IAddress;
GT_ReplyIMsg(Message);
LT_HandleInput(InfoHandle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
switch(MsgClass)
{
case IDCMP_CLOSEWINDOW:
if(!Done)
{
Forbid();
if(!(SetSignal(0,SIG_KILL) & SIG_KILL))
Parent = NULL;
Done = TRUE;
}
break;
case IDCMP_GADGETUP:
if(MsgGadget -> GadgetID == GAD_UPDATE)
LocalRefreshInfoWindow();
break;
}
}
}
}
while(!Done);
LocalCloseInfoWindow();
}
Forbid();
InfoTask = NULL;
if(Parent)
Signal(Parent,SIG_HANDSHAKE);
}
VOID
CloseInfoWindow()
{
Forbid();
if(InfoTask)
{
Signal(InfoTask,SIG_KILL);
ClrSignal(SIG_HANDSHAKE);
Wait(SIG_HANDSHAKE);
}
Permit();
}
VOID
OpenInfoWindow()
{
Forbid();
if(!InfoTask)
{
if(CreateTask("term Status Window Task",SysBase -> ThisTask -> tc_Node . ln_Pri,StatusTaskEntry,4000))
{
ClrSignal(SIG_HANDSHAKE);
Wait(SIG_HANDSHAKE);
}
}
if(InfoTask)
CheckItem(MEN_STATUS_WINDOW,TRUE);
else
CheckItem(MEN_STATUS_WINDOW,FALSE);
Permit();
}